import controls from './components';

type LinkControlType = {
    /**绑定联动的参数名称 */
    Param: string
    /**当前控件默认是否显示 */
    Default: boolean
    /**联动规则 */
    StateCondition: {
        /**当值是Value时 */
        Value: string
        /**是否显示 */
        Display: boolean
        /**条件判断符 */
        Condition: '==' | '!=' | '>=' | '<=' | '>' | '<' | 'in'
        /**联动类型 */
        ConditionType: 'Control' | 'URL' | 'localStorage'
    }[]
}

type ControlType = {
    /**控件类型 */
    Type: keyof typeof controls
    component?:never
    /**控件属性绑定 */
    Bind?: { [key: string]: any }
    /**控件联动【控制控件显示隐藏】 */
    LinkControl?:LinkControlType 
}|{
    /**控件类型 */
    Type?: never
    component:any
    /**控件属性绑定 */
    Bind?: { [key: string]: any }
    /**控件联动【控制控件显示隐藏】 */
    LinkControl?:LinkControlType 
}

type ProxyValue = {
    /**是否vue的ref对象*/
    ref?:never
    /** 属性名称 */
    key: string
    /** 绑定对象 */
    object: { [key: string]: any }
}|{
    /**是否vue的ref对象*/
    ref:boolean
    /** 属性名称 */
    key?: never
    /** 绑定对象 */
    object: any
}

export type attrsType = {
    /**参数名称 */
    Param: string
    /**参数中文名 */
    ParamCN?: string
    /**控件属性 */
    Control: ControlType
    /**默认值 */
    Value?: any
    /**控件隐藏时，是否保留config配置参数里面对应的值【默认控件隐藏，删除控件值】 */
    retainValueOnHide?: boolean
    /**代理对象【如果传了此属性，则当前控件的数据会绑定此属性对应的数据】 */
    ProxyValue?: ProxyValue
}
export type CustomCompProps = {
    /**控件属性 */
    attrs: attrsType
    /**组件参数配置 */
    config: { [key: string]: any }
}